/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package gui.venda;

import bin.Item;
import bin.Venda;
import bin.clientes.Cliente;
import bin.clientes.Telefone;
import bin.control.Control;
import bin.err.Erro;
import bin.exc.ECadastroInvalido;
import bin.exc.EEstoqueInsuficiente;
import bin.exc.EObjetoInexistente;
import bin.move.Expedicao;
import gui.JanelaPrincipal;
import static java.awt.image.ImageObserver.WIDTH;
import java.util.ArrayList;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 * Janela de Venda
 * <br>Janela para realizar uma venda qualquer informando um cliente e os devidos itens.
 * 
 * @see bin.Venda
 * @author Vinicius Biavatti
 */
public class JanelaVenda extends javax.swing.JInternalFrame {

    private JanelaPrincipal janelaPrincipal;
    private Venda venda;
    
    /**
     * Creates new form JanelaVenda
     */
    public JanelaVenda(JanelaPrincipal janelaPrincipal) {
        this.janelaPrincipal = janelaPrincipal;
        
        initComponents();
        
        this.liberarComponentesParaVenda(false);
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        btCancelar = new javax.swing.JButton();
        btConcluir = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        tbItens = new javax.swing.JTable();
        jLabel1 = new javax.swing.JLabel();
        txtItem = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        spQuantidade = new javax.swing.JSpinner();
        btAdd = new javax.swing.JButton();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        txtCliente = new javax.swing.JTextField();
        btPesquisarCliente = new javax.swing.JButton();
        jLabel5 = new javax.swing.JLabel();
        txtNomeCliente = new javax.swing.JTextField();
        btPesquisarItem = new javax.swing.JButton();
        btExcluirItem = new javax.swing.JButton();
        jLabel6 = new javax.swing.JLabel();
        lbTotal = new javax.swing.JLabel();
        jMenuBar1 = new javax.swing.JMenuBar();
        menuFechar = new javax.swing.JMenu();

        setIconifiable(true);
        setTitle("Venda");

        jPanel1.setBackground(new java.awt.Color(255, 255, 255));

        btCancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/icons/btCancelar.png"))); // NOI18N
        btCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btCancelarActionPerformed(evt);
            }
        });

        btConcluir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/icons/btConcluir.png"))); // NOI18N
        btConcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btConcluirActionPerformed(evt);
            }
        });

        tbItens.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "ID", "Item", "Valor", "Quantidade"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tbItens.getTableHeader().setReorderingAllowed(false);
        jScrollPane1.setViewportView(tbItens);

        jLabel1.setText("Item:");

        jLabel2.setText("Quantidade:");

        spQuantidade.setModel(new javax.swing.SpinnerNumberModel(1, 1, 99999, 1));

        btAdd.setText("Add");
        btAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btAddActionPerformed(evt);
            }
        });

        jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/Images/vendas.png"))); // NOI18N

        jLabel4.setText("Cliente:");

        txtCliente.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                txtClienteFocusLost(evt);
            }
        });

        btPesquisarCliente.setText("...");
        btPesquisarCliente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btPesquisarClienteActionPerformed(evt);
            }
        });

        jLabel5.setText("Nome:");

        txtNomeCliente.setEditable(false);

        btPesquisarItem.setText("...");
        btPesquisarItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btPesquisarItemActionPerformed(evt);
            }
        });

        btExcluirItem.setText("Excluir Item");
        btExcluirItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btExcluirItemActionPerformed(evt);
            }
        });

        jLabel6.setText("Valor total da venda:");

        lbTotal.setForeground(new java.awt.Color(255, 102, 0));
        lbTotal.setText("0.00");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(btExcluirItem)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(jLabel6)
                                .addGap(18, 18, 18)
                                .addComponent(lbTotal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                        .addGap(18, 18, 18)
                        .addComponent(btCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btConcluir, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jScrollPane1)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtItem, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btPesquisarItem)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(spQuantidade, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(btAdd, javax.swing.GroupLayout.DEFAULT_SIZE, 138, Short.MAX_VALUE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel4)
                            .addComponent(jLabel5))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(txtCliente)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(btPesquisarCliente))
                            .addComponent(txtNomeCliente))))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel4)
                            .addComponent(txtCliente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(btPesquisarCliente))
                        .addGap(15, 15, 15)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel5)
                            .addComponent(txtNomeCliente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(txtItem, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2)
                    .addComponent(spQuantidade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btAdd)
                    .addComponent(btPesquisarItem))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(btConcluir, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(btExcluirItem)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel6)
                            .addComponent(lbTotal, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addGap(99, 99, 99))
        );

        menuFechar.setText("Fechar");
        menuFechar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                menuFecharMouseClicked(evt);
            }
        });
        jMenuBar1.add(menuFechar);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 411, javax.swing.GroupLayout.PREFERRED_SIZE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Liberar ou bloquear respectivos campos da janela.
     * 
     * @param liberar Passar "true" para ativar modo Venda da janela e False para desativar
     */
    public void liberarComponentesParaVenda(boolean liberar)
    {
        this.txtCliente.setEditable(!liberar);
        this.btPesquisarCliente.setEnabled(!liberar);
        this.txtItem.setEditable(liberar);
        this.spQuantidade.setEnabled(liberar);
        this.btPesquisarItem.setEnabled(liberar);
        this.btAdd.setEnabled(liberar);
        this.btCancelar.setEnabled(liberar);
        this.btConcluir.setEnabled(liberar);
        this.btExcluirItem.setEnabled(liberar);
        this.menuFechar.setEnabled(!liberar);
    }
    
    /**
     * Apagar todos os registros de produtos na venda e instanciar uma nova janela substituta.
     * 
     * @param evt Não Utilizado
     */
    private void btCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btCancelarActionPerformed

        int confirm = JOptionPane.showConfirmDialog(this, "Deseja realmente cancelar esta venda?","Confirmação",JOptionPane.YES_NO_OPTION);
        if(confirm == JOptionPane.YES_OPTION)
        {
            this.cancelarVenda();
            this.reabrirJanela();
        }
        
    }//GEN-LAST:event_btCancelarActionPerformed

    /**
     * Reabrir janela caso concluir ou cancelar a venda.
     */
    public void reabrirJanela()
    {
        this.janelaPrincipal.getJanelaFactory().liberarJanela("[Menu, Faturamento, Venda]");
            
        JInternalFrame janela = this.janelaPrincipal.getJanelaFactory().createJanela("[Menu, Faturamento, Venda]");
        this.janelaPrincipal.getDesktopPane().add(janela);
        janela.setVisible(true);

        this.dispose();
    }
    
    /**
     * Varrer lista de intens informados na tabela e recuperar a quantidade em estoque.
     */
    private void cancelarVenda()
    {
        while(this.tbItens.getRowCount() > 0)
        {
            int itemID = (int)this.tbItens.getValueAt(0, 0);
            
            for(Expedicao ex : this.venda.getListaExpedicao())
            {
                if(ex.getItem().getId() == itemID)
                {
                    ex.getItem().setQtdEstoque(ex.getItem().getQtdEstoque() + ex.getQtd());
                    this.venda.getListaExpedicao().remove(ex);
                    break;
                }
            }
            
            DefaultTableModel dtm = (DefaultTableModel)this.tbItens.getModel();
            dtm.removeRow(0);
        }
    }
    
    /**
     * Finalizar Venda.
     * 
     * @param evt Não Utilizado
     */
    private void btConcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btConcluirActionPerformed

        if(this.tbItens.getRowCount() == 0)
        {
            JOptionPane.showMessageDialog(this, "Nenhum item selecionado para esta venda!", "Informação", JOptionPane.INFORMATION_MESSAGE);
            return;
        }
        int confirm = JOptionPane.showConfirmDialog(this, "Valor total da venda: " + this.lbTotal.getText() + "\nFinalizar venda?", "Proceguir?", JOptionPane.YES_NO_OPTION);
        if(confirm == JOptionPane.YES_OPTION)
        {
            JOptionPane.showMessageDialog(this, "Venda Finalizada!", "Concluir", JOptionPane.INFORMATION_MESSAGE);
            this.venda.setDataVenda(new Date());
            this.janelaPrincipal.getArmazem().getListaVendas().add(this.venda);
            this.janelaPrincipal.armazemNotify();
            this.reabrirJanela();
            return;
        }
    }//GEN-LAST:event_btConcluirActionPerformed

    /**
     * Ao retirar o foco do campo do cliente, será feita uma pesquisa para buscar o cliente
     * <br>informado no campo pelo seu ID. Será feitoa validações para ver se o conteúdo
     * <br>informado no campo é um número ou é válido.
     * 
     * @param evt Não utilizado
     */
    private void txtClienteFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtClienteFocusLost
       
        if(this.txtCliente.getText().equals(""))
        {
            return;
        }
        try
        {
            int clienteID = Integer.parseInt(this.txtCliente.getText());
            Cliente cliente = null;
            
            for(Cliente c : this.janelaPrincipal.getArmazem().getListaClientes())
            {
                if(c.getId() == clienteID)
                {
                    cliente = c;
                    break;
                }
            }
            if(cliente == null)
            {
                throw new EObjetoInexistente();
            }
            
            this.venda = new Venda(cliente);
            this.txtNomeCliente.setText(cliente.getNome());
            this.liberarComponentesParaVenda(true);
        }
        catch (NumberFormatException ex)
        {
            JOptionPane.showMessageDialog(this, "Tipo de ID incorreto", "Erro", JOptionPane.ERROR_MESSAGE);
            this.txtCliente.setText("");
        }
        catch(EObjetoInexistente ex)
        {
            JOptionPane.showMessageDialog(this, "Cliente não cadastrado", "Erro", JOptionPane.ERROR_MESSAGE);
            this.txtCliente.setText("");
        }
    }//GEN-LAST:event_txtClienteFocusLost

    /**
     * Adicionar item informado para venda. Será adicionado na tabela será tratado caso não tenha
     * <br>quantidade suficiente em estoque.
     * 
     * @param evt Não Utilizado
     */
    private void btAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddActionPerformed
        
        try
        {
            int itemID = Integer.parseInt(this.txtItem.getText());
            int quantidade = (int)this.spQuantidade.getValue();
            Item item = null;

            for(Item in : this.janelaPrincipal.getArmazem().getListaItens())
            {
                if(in.getId() == itemID)
                {
                    item = in;
                    break;
                }
            }
            if(item == null)
            {
                throw new EObjetoInexistente();
            }
            if(item.getQtdEstoque() < quantidade)
            {
                throw new EEstoqueInsuficiente(item);
            }

            Expedicao expedicao = new Expedicao();
            expedicao.setID(Control.getInstance().getMovID());
            expedicao.setData(new Date());
            expedicao.setItem(item);
            expedicao.setQtd(quantidade);
            
            item.setQtdEstoque(item.getQtdEstoque() - quantidade);
            
            this.addItemNaTabela(item, quantidade);
            this.txtItem.setText("");
            this.spQuantidade.setValue(1);
            this.txtItem.requestFocus();
            this.venda.getListaExpedicao().add(expedicao);
            
            this.calcularValorTotal();
        }
        catch (NumberFormatException ex)
        {
            JOptionPane.showMessageDialog(this, "Tipo de ID incorreto", "Erro", JOptionPane.ERROR_MESSAGE);
            this.txtItem.setText("");
            this.txtItem.requestFocus();
        }
        catch(EObjetoInexistente ex)
        {
            JOptionPane.showMessageDialog(this, "Item não cadastrado", "Erro", JOptionPane.ERROR_MESSAGE);
            this.txtItem.setText("");
            this.spQuantidade.setValue(1);
            this.txtItem.requestFocus();
        }
        catch(EEstoqueInsuficiente ex)
        {
            JOptionPane.showMessageDialog(this, "Estoque insuficiente para este Item\nQuantidade em Estoque: " 
                    + ex.getItem().getQtdEstoque() + " - Quantidade informada: " + this.spQuantidade.getValue(), "Erro", JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_btAddActionPerformed

    /**
     * Excluir item selecionado na lista e imediatamente ajustar seu estoque e retirar-lo da venda.
     * 
     * @param evt Não Utilizado
     */
    private void btExcluirItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btExcluirItemActionPerformed
        
        if(this.tbItens.getSelectedRow() == -1)
        {
            JOptionPane.showMessageDialog(this, "Nenhum item selecionado.","Informação",JOptionPane.INFORMATION_MESSAGE);
            return;
        }
        
        int selectionRow = tbItens.getSelectedRow();
        Object[] data = new Object[4];
        data[0] = this.tbItens.getValueAt(selectionRow, 0);
        data[1] = this.tbItens.getValueAt(selectionRow, 1);
        data[2] = this.tbItens.getValueAt(selectionRow, 2);
        data[3] = this.tbItens.getValueAt(selectionRow, 3);
        
        Item item = null;
        for(Item in : this.janelaPrincipal.getArmazem().getListaItens())
        {
            if(in.getId() == (int)data[0] )
            {
                item = in;
                break;
            }
        }
        
        if(item == null)
        {
            new Erro(new Exception("Objeto adicionado inexistente na lista de dados!"),"Erro ao remover Item!",false);
            return;
        }
        
        item.setQtdEstoque(item.getQtdEstoque() + (int)data[3]);
        
        for(Expedicao ex : this.venda.getListaExpedicao())
        {
            if(ex.getItem().getId() == item.getId())
            {
                this.venda.getListaExpedicao().remove(ex);
                break;
            }
        }
        
        DefaultTableModel dtm = (DefaultTableModel)this.tbItens.getModel();
        dtm.removeRow(selectionRow);
        
        this.calcularValorTotal();
    }//GEN-LAST:event_btExcluirItemActionPerformed

    /**
     * Fechar janela verificando se o menu está liberado.
     * 
     * @param evt Não Utilizado 
     */
    private void menuFecharMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuFecharMouseClicked
        
        if(this.menuFechar.isEnabled())
        {
            this.janelaPrincipal.getJanelaFactory().liberarJanela("[Menu, Faturamento, Venda]");
            this.dispose();
        }
    }//GEN-LAST:event_menuFecharMouseClicked

    /**
     * Abrir janela de pesquisa para clientes.
     * 
     * @param evt Não Utilizado 
     */
    private void btPesquisarClienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btPesquisarClienteActionPerformed
        
        Pesquisa janelaPesquisa = new Pesquisa(this.janelaPrincipal, true, this.janelaPrincipal, "Cliente", this.txtCliente);
        janelaPesquisa.setVisible(true);
        
    }//GEN-LAST:event_btPesquisarClienteActionPerformed

    /**
     * Abrir janela de pesquisa para Itens.
     * 
     * @param evt Não Utilizado 
     */
    private void btPesquisarItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btPesquisarItemActionPerformed
        
        Pesquisa janelaPesquisa = new Pesquisa(this.janelaPrincipal, true, this.janelaPrincipal, "Item", this.txtItem);
        janelaPesquisa.setVisible(true);
        
    }//GEN-LAST:event_btPesquisarItemActionPerformed

    /**
     * Adicionar Item na tabela de itens.
     * 
     * @param item Item na qual será adicionado
     * @param quantidade Quantidade na qual será vendida
     */
    private void addItemNaTabela(Item item, int quantidade)
    {
        DefaultTableModel dtm = (DefaultTableModel)this.tbItens.getModel();
        Object[] data = new Object[4];
        data[0] = item.getId();
        data[1] = item.getNome();
        data[2] = item.getPreco();
        data[3] = quantidade;
        dtm.addRow(data);
    }

    /**
     * Retorna a JanelaPrincipal para acesso ao Armazem.
     * 
     * @return JanelaPrincipal 
     */
    public JanelaPrincipal getJanelaPrincipal() {
        return janelaPrincipal;
    }

    /**
     * Calcular valor total referente aos itens adicionados na lista.
     */
    public void calcularValorTotal()
    {
        double valorTotal = 0.00;
        
        for(int i = 0; i < this.tbItens.getRowCount(); i++)
        {
            valorTotal += (Double)this.tbItens.getValueAt(i, 2) * (Integer)this.tbItens.getValueAt(i, 3);
        }
        
        this.lbTotal.setText(valorTotal + "");
        this.venda.setValorTotal(valorTotal);
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btAdd;
    private javax.swing.JButton btCancelar;
    private javax.swing.JButton btConcluir;
    private javax.swing.JButton btExcluirItem;
    private javax.swing.JButton btPesquisarCliente;
    private javax.swing.JButton btPesquisarItem;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lbTotal;
    private javax.swing.JMenu menuFechar;
    private javax.swing.JSpinner spQuantidade;
    private javax.swing.JTable tbItens;
    private javax.swing.JTextField txtCliente;
    private javax.swing.JTextField txtItem;
    private javax.swing.JTextField txtNomeCliente;
    // End of variables declaration//GEN-END:variables
}
